#include<bits/stdc++.h>
using namespace std;
#define in insert
#define er erase
#define N 1000010
int n,l,r;
char c;
multiset<int> sl[N],sr[N],tol,tor;
struct node{
	int l,r,l1,r1,len;
}tr[N*4];
inline void pushup(int p){
	tr[p].l1=max(tr[p*2].l1,tr[p*2+1].l1);
	tr[p].r1=min(tr[p*2].r1,tr[p*2+1].r1);
	tr[p].len=min(tr[p*2+1].r1-tr[p*2].l1,min(tr[p*2].len,tr[p*2+1].len));
	return ;
}
inline void build(int p,int l,int r){
	tr[p].l=l;
	tr[p].r=r;
	if(l==r){
		tr[p].l1=-(int)1e9;
		tr[p].r1=(int)1e9;
		tr[p].len=(int)1e9;
		return ;
	}
	int mid=(l+r)/2;
	build(p*2,l,mid);
	build(p*2+1,mid+1,r);
	pushup(p);
	return ;
}
inline void modify(int p,int x){
	if(tr[p].l==tr[p].r){
		if(!sr[x].empty()){
			tr[p].l1=(*sr[x].rbegin());
		}
		else{
			tr[p].l1=-(int)1e9;
		}
		if(!sl[x].empty()){
			tr[p].r1=(*sl[x].begin());
		}
		else{
			tr[p].r1=(int)1e9;
		}
		tr[p].len=tr[p].r1-tr[p].l1;
		return ;
	}
	int mid=(tr[p].l+tr[p].r)/2;
	if(x<=mid){
		modify(p*2,x);
	}
	else{
		modify(p*2+1,x);
	}
	pushup(p);
	return ;
}
signed main(){
	freopen("stone.in","r",stdin);
	freopen("stone.out","w",stdout);
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);
	cin>>n;
	build(1,1,1000000);
	while(n--){
		cin>>c>>l>>r;
		if(c=='A'){
			sl[l].in(r);
			sr[r].in(l);
			tol.in(l);
			tor.in(r);
		}
		else{
			sl[l].er(sl[l].find(r));
			sr[r].er(sr[r].find(l));
			tol.er(tol.find(l));
			tor.er(tor.find(r));
		}
		modify(1,l);
		modify(1,r);
		int ml=(*tol.rbegin());
		int mr=(*tor.begin());
		if(ml<=mr-1){
			cout<<(*sl[ml].begin())-(*sr[mr].rbegin())<<'\n';
		}
		else{
			cout<<tr[1].len<<'\n';
		}
	}
	return 0;
}